from sklearn.ensemble import BaggingRegressor
from sklearn.tree import DecisionTreeRegressor  # 弱学习器
from my_models.base import Base



class B_Regressor(Base):

    def __init__(self):

        # import ipdb;ipdb.set_trace();
        self.regressor = BaggingRegressor(
                                        estimator=DecisionTreeRegressor(),  # 基础估计器
                                        n_estimators=100,  # 集成的学习器数量
                                        max_samples=1.0,  # 每个学习器使用的样本比例或数量
                                        max_features=1.0,  # 每个学习器使用的特征比例或数量
                                        bootstrap=True,  # 是否有放回抽样
                                        bootstrap_features=False,  # 是否对特征进行有放回抽样
                                        oob_score=False,  # 是否使用袋外样本来估计泛化误差
                                        n_jobs=-1,  # 并行作业数量，-1 表示使用所有可用核心
                                        random_state=42  # 随机种子，保证结果可复现
                                            )

    def train(self, x_train, y_train):
        self.clf = self.regressor.fit(x_train, y_train)

    def valid(self, x_test, y_test):
        score_c = self.clf.score(x_test, y_test)
        print( "B_Regressor:{}".format(score_c))

    def save_model(self, save_path):
        pass

    def load_model(self, model_path):
        pass
